#ifndef INTERFACE_HPP
#define INTERFACE_HPP
/**
 * @file   interface.hpp
 * @author Kimmo Luoma <kimmo@PHOTON3>
 * @date   Thu Oct 11 15:08:23 2012
 * 
 * @brief  Interface for running QuantumWalk simulations
 * 
 * 
 */
#include <string>
#include <vector>
#include <alps/hdf5.hpp>
#include "coin.hpp"
#include "state.hpp"
#include "shift.hpp"
#include "RefBase.hpp"

namespace QuantumWalk{
  template<typename T> 
  class interface:virtual public RefBase{
  public:
    typedef coin<T>::ptr_t C_ptr;
    typedef shift<T>::ptr_t S_ptr;
    typedef state<T>::ptr_t Psi_ptr;
    interface():RefBase(){};
    interface(int dV,int dD,int steps,coin<T> C,shift<T> S,state<T> psi,int skip=0):
      RefBase(),dimV_(dV),dimD_(dD),steps_(steps),skip_(skip),C_(C),S_(S),psi_(psi){
    };
    //void initialize(std::string filename);
    void run();
    //void write();
  private:
    int dimV_,dimD_,steps_,skip_;
    coin<T> C_;
    shift<T> S_;
    state<T> psi_;
    std::string fname_;
  };
  
};

#endif
